import scipy.signal as signal
def stft(x, **params):
    '''
    :param x: 输入信号
    :param params: {fs:采样频率；
                    window:窗。默认为汉明窗；
                    nperseg： 每个段的长度，默认为256，
                    noverlap:重叠的点数。指定值时需要满足COLA约束。默认是窗长的一半，
                    nfft：fft长度，
                    detrend：（str、function或False）指定如何去趋势，默认为Flase，不去趋势。
                    return_onesided：默认为True，返回单边谱。
                    boundary：默认在时间序列两端添加0
                    padded：是否对时间序列进行填充0（当长度不够的时候），
                    axis：可以不必关心这个参数}
    :return: f:采样频率数组；t:段时间数组；Zxx:STFT结果
    '''
    f, t, zxx = signal.stft(x, **params) 
    return f, t, zxx
import matplotlib.pyplot as plt
def stft_specgram(x, file ,picname=None, **params):    #picname是给图像的名字，为了保存图像
    f, t, zxx = stft(x, **params)
    plt.pcolormesh(t, f, np.abs(zxx))
    #plt.colorbar()
    #plt.title('STFT Magnitude')
    plt.ylabel('Frequency [Hz]')
    plt.xlabel('Time [sec]')
    plt.tight_layout()
    plt.axis('off')
    #plt.show()
    filename='./test30tupian/'+file
    plt.savefig(filename, bbox_inches='tight', pad_inches=0)
    
    return t, f, zxx
import numpy as np
import matplotlib.pyplot as plt
import os
path = "./test30w" #文件夹目录
files= os.listdir(path) #得到文件夹下的所有文件名称
for file in files: #遍历文件夹
    if not os.path.isdir(file): #判断是否是文件夹，不是文件夹才打开
       f = open(path+"/"+file); #打开文件
       list = f.readlines()
       col=[]
       for k in list:
          k = k.strip('\n\n\n\t')  #去掉读取中的换行字符
          col.append(k)  
#print(col)
       col=np.array(col)
       col = np.array(col, dtype = 'float64')
       a,b,c=stft_specgram(col,file)
       
       
